package com.popay.common.utils.filter;

import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * @program: popay-parent
 *
 * @description: 拼装sql工具类
 *
 * @author: CuiWei
 *
 * @create: 2019-03-27 14:06
 **/
public class JoinQueryParamsSqlUtil {

    public static String joinQueryParamsSql(List<ParamFilter> filter) {
        StringBuilder returnSql = new StringBuilder();

        for (ParamFilter f : filter) {
            // 获取逻辑  -1:空  0：或者 1：并且
            switch (f.getLogic()){
                case 0 : returnSql.append(" or ");break;
                case 1 : returnSql.append(" and ");break;
            }
            // 获取左括号 0:空 1:(
            switch (f.getLeftBracket()){
                case 1 : returnSql.append("(");break;
            }
            // 获取字段名
            if (StringUtils.isNotBlank(f.getField())){
                if (f.getCondition() != 8 && f.getCondition() != 9){
                    returnSql.append(f.getField());
                }
            }
            // 获取条件 0:等于  1:不等于  2:大于  3:小于 4:大于等于 5:小于等于 6:包含 7:不包含 8:为空 9:不为空
            switch (f.getCondition()){
                case 0 : returnSql.append(" = ");break;
                case 1 : returnSql.append(" != ");break;
                case 2 : returnSql.append(" > ");break;
                case 3 : returnSql.append(" < ");break;
                case 4 : returnSql.append(" >= ");break;
                case 5 : returnSql.append(" <= ");break;
                case 6 : returnSql.append(" like ");break;
                case 7 : returnSql.append(" not like ");break;
                case 8 : returnSql.append(" ifnull(" + f.getField() + ",'') = '' ");break;
                case 9 : returnSql.append(" ifnull(" + f.getField() + ",'') != '' ");break;
                case 10 : returnSql.append(" in ");break;
                case 11 : returnSql.append(" not in ");break;
            }

            // 获取值
            if (StringUtils.isNotBlank(f.getValue())){
                // 获取数据类型 数据类型 -1:无  0:字符 1:整型 2:数值 3:日期 4:布尔型
                int fieldType = f.getFieldType();
                if (f.getCondition() == 6 ||f.getCondition() == 7){
                    switch(f.getFieldType()){
                        case 0 : returnSql.append("'%").append(f.getValue()).append("%'");break;
                        case 3 : returnSql.append("'%").append(f.getValue()).append("%'");break;
                        default : returnSql.append(f.getValue());break;
                    }
                }else{
                    switch(f.getFieldType()){
                        case 0 : returnSql.append("'").append(f.getValue()).append("'");break;
                        case 3 : returnSql.append("'").append(f.getValue()).append("'");break;
                        default : returnSql.append(f.getValue());break;
                    }
                }

            }
            // 获取右括号  0:空 1:)
            switch (f.getRightBracket()){
                case 1 : returnSql.append(")");break;
            }
        }
        if(returnSql.toString().trim().startsWith("and")){
            return "( 1=1 "+ returnSql.toString()+")";
        }
        return "("+ returnSql.toString()+")";
    }


}
